﻿#pragma once
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DELAYDEVICE_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样，源文件中包含此文件的任何其他项目都会将
// DELAYDEVICE_API 函数视为是从 DLL 导入的，而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef DELAYDEVICE_EXPORTS
#define DELAYDEVICE_API __declspec(dllexport)
#else
#define DELAYDEVICE_API __declspec(dllimport)
#endif

#include "DelayDefine.h"

// 此类是从 DelayDevice.dll 导出的
class DELAYDEVICE_API CDelayDevice 
{
public:
	//*****************************
	static CDelayDevice* GetInstance();
	void   SetMsgShow(CWnd* wnd);
	void   HideMsgShow(void);
	//void   ShowMsgShow(RECT rect);
	 
	void   ShowMsg(CString msg);
	    
	//*****************************
	void   GetIpInfo2(int *ip,int *mask, int *gate, int& port);
	void   SetIpInfo2(int *ip,int *mask, int *gate, int port);

	void   GetIpInfo(CString &ip,CString &mask, CString &gate, int& port);
	void   SetIpInfo(CString &ip,CString &mask, CString &gate, int& port);

	//void   SetRecvInfo(void* recvObj,DoRecvMsg doRecvMsg);
	bool   IsOpenTcp(void);
	//int    OpenTcp(CString &ip,CString &mask, CString &gate, int& port); 
	int    OpenTcp(void);
	int    CloseTcp(void);

	//*****************************
	//广播消息类，此消息没有回传，有结果的上报，可根据上报信息进行结果判定
	int     GetDevSts(void);//获取设备状态，可根据回传判定通信是否正常，设备个数是否正确
	int     SetCorrect(void);
	int     SetSpeaker(bool save,bool open);//save只提供给技术，开发建议不保存（save=false)
	int     GetUpInfo(bool time);//上报数据（IO和AD），time=true，定时上报，否则上报一次
	//全播，有回传，可通过发送和回传一样判定通信是否正常（命令是否下发成功）
	
	int     SetFlash(str_Flash* inst);
	int     SetArgs(str_Args* inst);

	//单播，有回传，可通过发送和回传一样判定通信是否正常（命令是否下发成功）
	int SetIP(str_IP* inst);

	//设备消息的备份，用于对比接收的回传是否一致
	int		GetBakMsgLen(void);
	BYTE*	GetBakMsg(void);
	 
	//调试命令，勿用***************************** 
	void   SetOutWindow(CWnd *wnd);
	
private:
	static CDelayDevice *m_instance;

	CWnd						*m_outWindow;

	BYTE						m_data[1000],m_dataBak[1000];
	int							m_beg,m_begBak;
	CString						tmpStr;
	double						m_ad[18];
	unsigned int				m_ioMask,tmpUint;
	bool						m_isShowMSg;

public:
	~CDelayDevice(void);
private:
	CDelayDevice(void);
	CDelayDevice(const CDelayDevice&);
	CDelayDevice& operator=(const CDelayDevice&);
public : 
	FunBakDevConn	BakDevConn;
	FunBakDevSts	BakDevSts;
	FunBakCorrSts	BakCorrSts;
	FunBakFlashSts	BakFlashSts; 
	FunBakADIO		BakADIO;
	FunBakSetIPSts	BakSetIPSts;
	FunBakCmdSame	BakCmdSame;
	                      	
}; 